package c2stage_20220202.ccc027Polymorphic;
// 多态必须满足几个条件
// 1.有父类和子类，二者存在继承关系
// 2.有方法重写
// 3.有父类引用指向子类对象

// 多态可以这么理解：
// 我创建了一个猫，这个猫是猫，同时也是一个动物
// 那么对于我new 出来的这个cat来说，cat就有不同形态（多态）的特点


// 目标：先认识多态的形式
// 父类  对象名称 = new 子类构造器();

public class ccc018demo {
    public static void main(String[] args) {
        ccc016animal xx = new ccc017dog();
        //父类引用指向子类对象,最终new的对象是dog
        // 可以理解为：
        // 在动物中，创建了一条狗
        // 这条狗的age变量按照动物中设定的展示，age为父类的10
        // 同时，这条狗的eat方法，按照子类展示
        // 虽然动物都可以吃，但是狗吃东西的方式和狗有关系，鱼吃东西的方式和鱼有关系
        // 总结：变量看父类，方法看子类
        // 因为方法重写过了，但是变量没有重写
        System.out.println(xx.age);
        // System.out.println(xx.weight);
        //变量看左边--------------------------------------------
        //左边父类中有age，所以xx.age可以访问，
        //子类有weight，但是父类没有，所以weight不可以访问
        //执行的时候看左边---------------------------------------
        //左边父类中的age为10，右边的子类中将age改动为20，
        //最后按照age=10执行
        xx.eat();
        //xx.damage();
        //编译的时候看左边--------------------------------------
        //如果左边父类中eat方法存在就可以进行，不存在就不可以。
        //执行的时候看右边---------------------------------------
        //左边为10，右边改动为20，就按照改动之后的20执行
    }
}
